package functions

import (
	"fmt"
)

func squares() func() int { //此函数返回一个函数
	var x int
	return func() int {
		x++
		return x * x
	}
}

func squares1() func() int { //此函数返回一个函数
	return func() int {
		var x int
		x++
		return x * x
	}
}

func Anonymous() {
	f := squares()   //相当于返回的那个函数付给了f
	fmt.Println(f()) //x变量在返回后任然存在，知识隐藏在f中。
	fmt.Println(f())

	g := squares1()
	fmt.Println(g())
	fmt.Println(g())

	//如果匿名函数需要进行递归，那么必须按照下面的顺序
	var function1 func(a int) //先定义一个变量
	function1 = func(a int) { //将匿名函数赋给变量
		function1(1) //调用函数做递归
	}

	// function2:= func(a int){
	// 	function2(2) //这样子会报错，函数未定义，系统识别不到要递归的函数。
	// }

}
